Choć publicznie trudno się przyznać (bo jednak wieś), od lat jestem pasjonatem Konkursu Piosenki Eurowizji. Śledzę i ekscytuję się widowiskiem rok w rok, więc nie kryję, że jestem szczerze podekscytowany moimi kolejnymi paroma godzinami życia, w których zajmę się danymi dotyczącymi tego eventu.
Do analizy postanowiłem wybrać zbiór Eurovision Song Contest Scores 1975-2019, który znalazłem na w datasetSearch.com pod linkiem:
https://data.world/datagraver/eurovision-song-contest-scores-1975-2019
Zbiór danych zawiera jeden plik w formacie .xlsx składający się z trzech arkuszy:
Data
Remarks
Sources
… oczywiście do naszej analizy przyda się tylko ten pierwszy, składający się z aż z 49832 wierszy dotyczących informacji o tym który kraj w którym roku jakiemu państwu dał ile punktów.
Po pierwsze - wczytajmy ten zbiór danych. Przed wykonaniem kolejnych linijek kodu, przekonwertowałem dodatkowo wejściowy zbiór danych z pliku eurovision_song_contest_1975_2019v3.xlsx do rozszerzenia .csv za pomocą narzędzia online (https://www.zamzar.com/convert/xlsx-to-csv/).
# setwd("/home/samba/kosternaj/Desktop/05Wiz/pdOstatnie") # required on my PC
escResults <- read.table(file = "eurovision_song_contest_1975_2019v3.csv",
sep = ',', header = TRUE)
Sprawdźmy czy wszystko poszło zgodnie z planem - wyświetlmy losowe 10 wierszy.
library(dplyr)
library(DT)
# install.packages("webshot") # if not installed
# webshot::install_phantomjs() # if not installed
datatable(escResults[sample(nrow(escResults)),])
## Warning in instance$preRenderHook(instance): It seems your data is too
## big for client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Hurra! Wszystko poszło zgodnie z planem.
Tylko czy aż tak szczegółowe dane będą nam potrzebne? Zmodyfikuję moję ramkę danych, pozbywając się kolumn Duplicate, From.country, To.country i Jury.or.Televoting, po prostu sumując dla każdego konkursu liczbę punktów na państwo.
escResults <- escResults %>%
select (-c(Edition, Jury.or.Televoting, Duplicate)) %>%
group_by(Year, X.semi...final, To.country) %>%
summarise(Points = sum(Points)) %>%
rename("TypeOfFinal" = "X.semi...final", "Country" = "To.country")
Raz jeszcze upewnijmy się, że operacja została zakończona powodzeniem.
datatable(escResults[sample(nrow(escResults)),])
Wszystko poszło zgodnie z planem. Ale dobra, czas na tabele przestawne.
Na początku wczytajmy cały zbiór danych
# install.packages("rpivotTable") # if not installed
library(rpivotTable)
rpivotTable(escResults,
height = 700)
No i fajnie - można się bawić.
Wczytajmy tylko dane dotyczące punktów z finałów i wyświetlmy punkty krajow, które zdobyły ich największą ilość.
escResultsFinal <- escResults %>%
ungroup() %>%
filter(TypeOfFinal == "f") %>%
select(Year, Country, Points)
rpivotTable(escResultsFinal, cols = "Year",
aggregatorName = "Maximum", vals = "Points",
rendererName = "Bar Chart",
height = 700)
… Widać wejście nowego systemu głosów w 2016 r. i dominację Salvadora Sobrala z Portugalii 2017 nad innymi latami!
Wciągu kilkudziesięciu lat kilka razy zmienił się system głosowania, a i rosnąca liczba państw biorących udział również miała wpływ na pulę punktów do rozdania. Ile punktów zdobyły kraje o najbardziej “przeciętnym” wyniku? Zweryfikujmy to w zależności od dni koncertów!
rpivotTable(escResults, cols = "Year", rows = "TypeOfFinal",
aggregatorName = "Median", vals = "Points",
rendererName = "Line Chart",
height = 700)
Sprawdźmy ile razy na ekranie moglismy zobaczyć występy poszczególnych państw.
rpivotTable(escResults, rows = "Country",
aggregatorName = "Count",
rendererName = "Bar Chart",
height = 700)
Polska łącznie w finałach i półfinałach wystąpiła 27 razy dotychczas! Co mimo przerw w udziale, daje i tak ponad 1 występ na rok.
Ode mnie na tyle, zachęcam do samodzielnej eksporacji!